package co.gov.medellin.ssti.sub.model.dao;

import java.sql.Connection;

import co.gov.medellin.ssti.sub.model.dao.impl.OracleDAOFactory;

/**
 * Clase abstract factory para la creacion de DAOs para SUB.
 * 
 * @author Consultsoft4
 * 
 */
public abstract class DAOFactory {
	// Tipos de DAO soportados.
	public static final int ORACLE = 1;

	// Metodo para cada dao que pueda instanciarse.
	public abstract IAreaDAO getAreaDAO(Connection con);

	public abstract IAtributosDAO getAtributosDAO(Connection con);

	public abstract IAuditoriaDAO getAuditoriaDAO(Connection con);

	public abstract IBeneficiarioDAO getBeneficiarioDAO(Connection con);

	public abstract IBeneficioDAO getBeneficioDAO(Connection con);

	public abstract IBeneficioOtorgadoDAO getBeneficioOtorgadoDAO(Connection con);

	public abstract ICargueDAO getCargueDAO(Connection con);

	public abstract IErrorDAO getErrorDAO(Connection con);

	public abstract IInterfazMELDAO getInterfazMELDAO(Connection con);

	public abstract IGrupoFamiliarDAO getGrupoFamiliarDAO(Connection con);

	public abstract IModificarBOTDAO getModificarBOTDAO(Connection con);

	public abstract IProgramaDAO getProgramaDAO(Connection con);

	public abstract IRenovarDAO getRenovarDAO(Connection con);

	public abstract IRepBeneficioOtorgadoDAO getRepBeneficioOtorgadoDAO(
			Connection con);

	public abstract IRepDetBeneficiarioDAO getRepDetBeneficiarioDAO(
			Connection con);

	public abstract IRepDetBOTDAO getRepDetBOTDAO(Connection con);

	public abstract IRepDetCruceDAO getRepDetCruceDAO(Connection con);

	public abstract IReporteTotalBeneficiariosDAO getReporteTotalBeneficiariosDAO(
			Connection con);

	public abstract IReporteTotalBeneficiosOtorDAO getReporteTotalBeneficiosOtorDAO(
			Connection con);

	public abstract IReporteTotalComunaDAO getReporteTotalComunaDAO(
			Connection con);

	public abstract IReporteTotalGrupoFamiliarDAO getReporteTotalGrupoFamiliarDAO(
			Connection con);

	public abstract IReporteTotalProgramasDAO getReporteTotalProgramasDAO(
			Connection con);

	public abstract IReportTotalBenBerDAO getReportTotalBenBerDAO(Connection con);

	public abstract IRestriccionDAO getRestriccionDAO(Connection con);

	public abstract ISecretariaDAO getSecretariaDAO(Connection con);

	public abstract ISedeDAO getSedeDAO(Connection con);

	public abstract ISubprogramaDAO getSubprogramaDAO(Connection con);

	public abstract ISubprogramaSedeDAO getSubprogramaSedeDAO(Connection con);

	public abstract IUsuarioSubprogramaDAO getUsuarioSubprogramaDAO(
			Connection con);

	public abstract IVerificacionDAO getVerificacionDAO(Connection con);

	public abstract IVflexDAO getVflexDAO(Connection con);

	/**
	 * Metodo para obtener una instancia de la factory segun el tipo de factory.
	 * 
	 * @param tipoFactory
	 *            int que representa el tipo de factory a ser instanciada.
	 * @return
	 */
	public static DAOFactory getDAOFactory(int tipoFactory) {

		switch (tipoFactory) {
		case ORACLE:
			return new OracleDAOFactory();
		default:
			return null;
		}
	}
}
